

# 2.2.1. 读取数据集

# 将数据集按行写入CSV文件中
import os

os.makedirs(os.path.join('.','data'),exist_ok=True)
data_file = os.path.join('.','data','one.csv')
with open(data_file,'w') as f:
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')  # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

# 从创建的CSV文件中加载原始数据集
import pandas as pd

data = pd.read_csv(data_file)
print(data)
# 输出：   NumRooms Alley   Price
# 0       NaN  Pave  127500
# 1       2.0   NaN  106000
# 2       4.0   NaN  178100
# 3       NaN   NaN  140000



# 2.2.2. 处理缺失值
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2]
inputs = inputs.fillna(inputs.mean(numeric_only=True))
print(inputs)
# 输出：   NumRooms Alley
# 0       3.0  Pave
# 1       2.0   NaN
# 2       4.0   NaN
# 3       3.0   NaN

# 类别特征（字符串列）转换为机器学习算法可以理解的数值特征（0/1 编码）
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

# 输出：   NumRooms  Alley_Pave  Alley_nan
# 0       3.0        True      False
# 1       2.0       False       True
# 2       4.0       False       True
# 3       3.0       False       True

# 2.2.3. 转换为张量格式
import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))
print(X)
print(y)
# 输出：tensor([[3., 1., 0.],
#         [2., 0., 1.],
#         [4., 0., 1.],
#         [3., 0., 1.]], dtype=torch.float64)
# tensor([127500., 106000., 178100., 140000.], dtype=torch.float64)
